﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Configuration;
using System.Data.SqlClient;
using Website.Logger;
using DAL;
using BOL;
using ExtAspNet;
using WebLib;
using System.Web.Script.Services;
using System.Web.Services;
using System.Xml;
using System.IO;            
using UtilityExtensions;

namespace UILGestion
{
    public partial class _default : PageBase
    {
        [WebMethod(), ScriptMethod()]
        public static string GetSearchResult(String prefixText, String contextKey)
        {

            //ProveedorBL bol = new ProveedorBL();
            
            return Util.Tbl2Str(Util.EntidadToDataTable (BOL.BuscarBL.GetEntidad(prefixText, 15)));


        }
         protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!IsPostBack)
                                    {
                                        try
                                        {
                                            int i = 0;
                                            i=(int)Session["idEmpleado"];
                                                                                  }
                                        catch
                                        {
                                            Response.Redirect("loginForm.aspx", false);
                                        }


                                        FormatForm();

                    // Current version.
                    
                    usuarioLabel.Text=(string)Session["login.Empleado.descripcion"];
                    Region2.Title = " ";// (string)Session["login.Empresa.descripcion"];
                  
                 }
            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
              //  Alert.Show(sqlex.Message, "Error", MessageBoxIcon.Error);

            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
            //    Alert.Show(ex.Message, "Error", MessageBoxIcon.Error);
            }
            
        }
        private void FormatForm()
        {
            showComboBox();
            loadMaestro();

            var moneda = DbUtil.Db.Monedas.Single(p => p.idInternal == 4);
            var empleado = DbUtil.Db.Empleados.Single(p => p.idInternal == (int)Session["idEmpleado"]);

            if(empleado.bitModuloCompra.Value)
                loadTreeCompras();

            if (empleado.bitModuloVenta.Value)
                loadTreeVenta();

            if (empleado.bitModuloAlmacen.Value)
                loadTreeAlmacen();

            if (empleado.bitAdmin)
            {
                  loadSeguridad();
            }

             try
             { labCurrentVersion.Text = moneda.getTipoCambio(DbUtil.Db, DateTime.Now).ToString(); }
             catch
             {
                 labCurrentVersion.Text = "0.000";
             }

        }

        protected void showComboBox()
    {
           
                EmpleadoBL emp= new EmpleadoBL();
                
                //rolDropDownList.DataSource=emp.getEmpleadoRol((int)Session["idEmpleado"]);
                //rolDropDownList.DataTextField = "descripcion";
                //rolDropDownList.DataValueField = "idInternal";
                //rolDropDownList.DataBind();
               //List<ListValueInfo> idEmpleado =new ListValueBL().GetEstadoCliente.getEmpleadoRol((int)Session["idEmpleado"]);
               //Rol rol = DbUtil.Db.Rols.Single(p => p.idInternal == idEmpleado.First().idInternal);

               //LogoEmpresa.ImageUrl = DbUtil.Db.Empresas.Single(p => p.idInternal == (int)Session["login.Empresa.idEmpresa"]).logoForm.ToString();

                //LoginInfo log = (LoginInfo)Session["loginInfo"];

                //log.rol = rol;
                //Session["loginInfo"]=log  ;
               //Session["idRol"] = rol.idInternal;  //utilizado

          
            
        
    }
        protected void  logoffLinkButton_click(object sender, EventArgs e)
 {


     Session["usuario"] = null;
     Session["login"] = false;
     Session["idEmpleado"] = null;
     Session["login.Empleado.descripcion"] = null;

     Response.Redirect("LoginForm.aspx",true);
 }



        private void loadTreeCompras()
        {




            var q = from b in DbUtil.Db.EmpleadoObras
                    where b.idEmpleado == (int)Session["idEmpleado"]
                    select b.Obra.Proyecto.Empresa;

            List<Empresa> p = q.OrderBy(l => l.descripcion).Distinct().ToList();



            if (p.Count() > 0)
            {

                foreach (Empresa empresa in p)
                {

                    ExtAspNet.TreeNode node = new ExtAspNet.TreeNode();
                    node.Text = empresa.descripcion;
                    node.Expanded = true;
                    node.Leaf = false;
                    node.IconUrl = "images/empresasoff.png";
                    node.SingleClickExpand = true;

                    node.EnablePostBack = false;
                    treeMenu.Nodes.Add(node);


                    loadTreeProyecto(empresa, node);

                }

                treeMenu.CollapseAllNodes();
            }








        }
        private void loadTreeVenta()
        {
            var q = from b in DbUtil.Db.EmpleadoProys
                    where
                    b.idEmpleado == (int)Session["idEmpleado"]
                    select b.Proyecto.Empresa;

            List<Empresa> p = q.Distinct().ToList();

            if (p.Count() > 0)
            {

                foreach (Empresa empresa in p)
                {

                    ExtAspNet.TreeNode node = new ExtAspNet.TreeNode();
                    node.Text = empresa.descripcion;
                    node.Expanded = true;
                    node.Leaf = false;
                    node.IconUrl = "images/Proyecto.png";
                    node.SingleClickExpand = true;

                    node.EnablePostBack = false;
                    treeVenta.Nodes.Add(node);


                    loadTreeVenta(empresa, node);


                }

                treeMenu.CollapseAllNodes();
            }

        }

        private void loadTreeAlmacen()
        {

            var q = from b in DbUtil.Db.EmpleadoObras
                    where b.idEmpleado == (int)Session["idEmpleado"]
                    & b.Obra.Proyecto.Empresa.activo==true
                    select b.Obra.Proyecto.Empresa;

            List<Empresa> p = q.Distinct().OrderBy(l=>l.descripcion).ToList();

            if (p.Count() > 0)
            {

                foreach (Empresa empresa in p)
                {
                    ExtAspNet.TreeNode node = new ExtAspNet.TreeNode();
                    node.Text = empresa.descripcion;
                    node.Expanded = true;
                    node.Leaf = false;
                    node.IconUrl = "images/empresasoff.png";
                    node.SingleClickExpand = true;
                    node.EnablePostBack = false;

                    treeAlmacen.Nodes.Add(node);

                    loadTreeProyectoALM(empresa, node);

                }

                treeAlmacen.CollapseAllNodes();
            }








        }

        private void loadTreeObra(Proyecto proyecto, ExtAspNet.TreeNode treeNode)
        {



            var q = from b in DbUtil.Db.EmpleadoObras
                    where
                    b.Obra.idProyecto == proyecto.idInternal
                    & b.idEmpleado == (int)Session["idEmpleado"]
                    select b.Obra;

            List<Obra> p = q.Distinct().ToList();



            if (p.Count() > 0)
            {

                foreach (Obra obra in p)
                {

                    ExtAspNet.TreeNode node = new ExtAspNet.TreeNode();
                    node.Text = proyecto.descripcion;
                    node.Expanded = true;
                    node.Leaf = false;
                    node.IconUrl = "images/Proyecto.png";
                    node.SingleClickExpand = true;

                    node.EnablePostBack = false;
                    treeNode.Nodes.Add(node);


                  //  ResolveSubTreeAlmacen(obra, node);

                }


            }








        }
        private void loadTreeProyecto(Empresa empresa, ExtAspNet.TreeNode treeNode)
        {

            

            var q = from b in DbUtil.Db.EmpleadoObras
                    where 
                    b.Obra.Proyecto.idEmpresa == empresa.idInternal
                    & b.idEmpleado == (int)Session["idEmpleado"]
                    select b.Obra.Proyecto;

            List<Proyecto> p = q.Distinct().OrderBy(l=>l.descripcion).ToList();



            if (p.Count() > 0)
            {

                foreach (Proyecto proyecto in p)
                {

                    ExtAspNet.TreeNode node = new ExtAspNet.TreeNode();
                    node.Text = proyecto.descripcion;
                    node.Expanded = true;
                    node.Leaf = false;
                    node.IconUrl = "images/Proyecto.png";
                    node.SingleClickExpand = true;

                    node.EnablePostBack = false;
                    treeNode.Nodes.Add(node);


                    ResolveSubTree(proyecto, node);

                }

                
            }








        }


        private void loadTreeProyectoALM(Empresa empresa, ExtAspNet.TreeNode treeNode)
        {

            var q = from b in DbUtil.Db.EmpleadoObras
                    where
                    b.Obra.Proyecto.idEmpresa == empresa.idInternal
                    & b.idEmpleado == (int)Session["idEmpleado"]
                    select b.Obra.Proyecto;

            List<Proyecto> p = q.OrderBy(l => l.descripcion).Distinct().ToList();



            if (p.Count() > 0)
            {

                foreach (Proyecto proyecto in p)
                {

                    ExtAspNet.TreeNode node = new ExtAspNet.TreeNode();
                    node.Text = proyecto.descripcion;
                    node.Expanded = true;
                    node.Leaf = false;
                    node.IconUrl = "images/Proyecto.png";
                    node.SingleClickExpand = true;

                    node.EnablePostBack = false;
                    treeNode.Nodes.Add(node);


                    ResolveSubTreeAlmacen(proyecto, node);

                }


            }








        }

        private void loadTreeVenta(Empresa empresa, ExtAspNet.TreeNode treeNode)
        {
                    var q = from b in DbUtil.Db.EmpleadoProys
                    where b.Proyecto.idEmpresa == empresa.idInternal
                    & b.idEmpleado == (int)Session["idEmpleado"]
                    select b.Proyecto;

                    List<Proyecto> p = q.OrderBy(l => l.descripcion).Distinct().ToList();

            if (p.Count() > 0)
            {

                foreach (Proyecto proyecto in p)
                {

                    ExtAspNet.TreeNode node = new ExtAspNet.TreeNode();
                    node.Text = proyecto.descripcion;
                    node.Expanded = true;
                    node.Leaf = true;
                    node.IconUrl = "images/Proyecto.png";
                    node.SingleClickExpand = true;
                    //para el caso de venta , se maneja por proyecto
                      //para el caso de ventas la idpalicacion es 5
                    node.NodeID = "5-" + proyecto.idInternal;
                    string rutaUrl = String.Format("~/VentaAdmin/VentaAdminForm.aspx?&idProyecto={0}",  proyecto.idInternal);
                    node.NavigateUrl = rutaUrl;
                    node.EnablePostBack = false;
                    treeNode.Nodes.Add(node);


                    //ResolveSubTreeVenta(proyecto, node);
                    
                    
                    
                    






                }

                treeMenu.CollapseAllNodes();
            }

        }


        private void loadMaestro()
        {
            ExtAspNet.TreeNode node = new ExtAspNet.TreeNode();
            node.Text = "Mantenimiento";
            node.Expanded = true;
            node.Leaf = false;
            node.IconUrl = "images/Admi.png";
            node.SingleClickExpand = true;
            node.EnablePostBack = false;
            treeOption.Nodes.Add(node);
            resolveSubAdmin(node);
          
        }


        private void loadSeguridad()
        {
                ExtAspNet.TreeNode node1 = new ExtAspNet.TreeNode();
                node1.Text = "Seguridad";
                node1.Expanded = true;
                node1.Leaf = false;
                node1.IconUrl = "images/class.gif";
                node1.SingleClickExpand = true;
                node1.EnablePostBack = false;
                treeOption.Nodes.Add(node1);
                ResolveSubTreeMenu(node1.Text, node1);
        
        }
  
 



   //private void loadSeguridad()
   //{




   //    ExtAspNet.TreeNode node = new ExtAspNet.TreeNode();
   //    node.Text = "Seguridad";
   //    node.Expanded = true;
   //    node.Leaf = false;
   //    node.IconUrl = "images/Admi.png";
   //    node.SingleClickExpand = true;
   //    node.EnablePostBack = false;
   //    treeMenu.Nodes.Add(node);
   //    resolveSubSeguridad(node);




   //}

   //private void resolveSubSeguridad(ExtAspNet.TreeNode treeNode)
   //{
            
   //        ExtAspNet.TreeNode node = new ExtAspNet.TreeNode();
   //        node.Text = "Usuarios";
   //        node.Expanded = true;
   //        node.Leaf = true;
   //        node.NavigateUrl = "Admin/Empl.aspx" ;
   //        node.EnablePostBack = false;
   //        treeNode.Nodes.Add(node);


   //    }

        
        private void resolveSubAdmin(ExtAspNet.TreeNode treeNode)
   {
            
           ExtAspNet.TreeNode node = new ExtAspNet.TreeNode();
           node.NodeID = "1";
           node.Text = "ADMINISTRACION";
           node.Expanded = true;
           node.Leaf = true;

           node.NavigateUrl = "Admin/AdminForm.aspx" ;
           node.EnablePostBack = false;
           treeNode.Nodes.Add(node);


       }


   //     private void resolveSubAdminVenta(ExtAspNet.TreeNode treeNode)
   //{
            
   //        ExtAspNet.TreeNode node = new ExtAspNet.TreeNode();
   //        node.NodeID = "1";
   //        node.Text = "Listas";
   //        node.Expanded = true;
   //        node.Leaf = true;

   //        node.NavigateUrl = "Admin/VentaAdminForm.aspx" ;
   //        node.EnablePostBack = false;
   //        treeNode.Nodes.Add(node);


   //    }
        
   protected void rolDropDownList_onselectIndexChanged(object sender, EventArgs e)
   {
      
       //using (dbGestionDataContext _db= new dbGestionDataContext(Parametros.strConnString))
       //{

       //Rol rol = _db.Rol.Single(p => p.idInternal == int.Parse(rolDropDownList.SelectedValue));
       //LoginInfo log = (LoginInfo)Session["loginInfo"];
       //log.rol = rol;
       //Session["loginInfo"] = log;
       // }
   }


        private void ResolveSubTree(Proyecto proyecto, ExtAspNet.TreeNode treeNode)
        {

            

            var q = (from a in DbUtil.Db.EmpleadoObras
                  where a.Obra.idProyecto == proyecto.idInternal & 
                    a.idEmpleado == (int)Session["idEmpleado"] &
                    a.Obra.Proyecto.idProyectoTipo==48
                    select a.Obra).Distinct().OrderBy(p=>p.descripcion);

                                               
            foreach (DAL.Obra obra in q)
            {
                //caso de las obras  =2
                ExtAspNet.TreeNode node = new ExtAspNet.TreeNode();
                node.NodeID = "2-"+ obra.idInternal;
                node.Text = obra.descripcion;
                node.Expanded = true;
                node.Leaf = true;
                string rutaUrl = String.Format("~/ObraAdmin/ObraAdminForm.aspx?idObra={0}", obra.idInternal);
                node.NavigateUrl = rutaUrl;
                node.IconUrl = "images/obra.png";
                    
                node.EnablePostBack = false;
                treeNode.Nodes.Add(node);
               
                
            }
        }

        private void ResolveSubTreeAlmacen(Proyecto  proyecto, 
                                    ExtAspNet.TreeNode treeNode)
        {

            var q = (from a in DbUtil.Db.EmpleadoObras
                    where a.Obra.idProyecto == proyecto.idInternal
                     & a.idEmpleado==(int)Session["idEmpleado"] 
                    select a.idObra).ToList();


            var w = from a in DbUtil.Db.Almacens
                    where q.Contains(a.idObra.Value)
                    select a;


            foreach (Almacen alamcen in w)
            {
                                //-------6 -> almacen
                ExtAspNet.TreeNode node = new ExtAspNet.TreeNode();
                node.NodeID = "6-" + alamcen.idInternal;
                node.Text = alamcen.descripcion;
                node.Expanded = true;
                node.Leaf = true;
                string rutaUrl = String.Format("~/AlmacenAdmin/AlmacenAdmin.aspx?idObra={0}&idAlmacen={1}", alamcen.idObra, alamcen.idInternal);
                
                node.NavigateUrl = rutaUrl;
                node.IconUrl = "images/obra.png";

                node.EnablePostBack = false;
                treeNode.Nodes.Add(node);


            }
        }

        private void ResolveSubTreeVenta(Proyecto proyecto, ExtAspNet.TreeNode treeNode)
        {
                    var q = (from a in DbUtil.Db.Etapas
                             where a.idProyecto == proyecto.idInternal & 
                             a.Proyecto.idProyectoTipo == 50
                             select a).Distinct();

            foreach (var  etapa in q)
            {
                //caso de las obras  =2
                ExtAspNet.TreeNode node = new ExtAspNet.TreeNode();
                node.NodeID = "2-" + etapa.idInternal;
                node.Text = etapa.descripcion;
                node.Expanded = true;
                node.Leaf = true;
                string rutaUrl = String.Format("~/VentaAdmin/VentaAdminForm.aspx?idEtapa={0}&idProyecto={1}", etapa.idInternal,etapa.idProyecto);
                node.NavigateUrl = rutaUrl;
                node.EnablePostBack = false;
                treeNode.Nodes.Add(node);


            }
        }

        private void ResolveSubTreeMenu(string tipo, ExtAspNet.TreeNode treeNode)
        {

              ExtAspNet.TreeNode node = new ExtAspNet.TreeNode();
           node.NodeID = "2";
           node.Text = "CONFIGURACION";
           node.Expanded = true;
           node.Leaf = true;

           node.NavigateUrl = "~/Seguridad/AdminSeguridadForm.aspx" ;
           node.EnablePostBack = false;
           treeNode.Nodes.Add(node);


            //string tipoc = "Seguridad";
            


            //List<DAL.Menu> w = (from a in DbUtil.Db.Menus
            //                    where a.idAplicacion == 3
            //                    select a).ToList();

            
            //foreach (DAL.Menu menu in w)
            //{
            //    ExtAspNet.TreeNode node = new ExtAspNet.TreeNode();
                
            //    node.Text = menu.descripcion;
            //    node.Expanded = true;
              
            //    node.Leaf = true;
            //    node.NavigateUrl = menu.url;
            //    node.IconUrl = "images/class.gif";
            //    node.EnablePostBack = false;
            //    treeNode.Nodes.Add(node);
            //    node.NodeID = "0" + node.NodeID;
                           
               
                
            //}
        }


        private void ResolveSUBSubTree(Obra Obra, ExtAspNet.TreeNode treeNode)
        {

            dbGestionDataContext _db =
                          new dbGestionDataContext(Parametros.strConnString);

            var q = from a in _db.Presupuesto
                    where a.idObra == Obra.idInternal
                    select a;

            foreach (DAL.Presupuesto  obra in q)
            {
                ExtAspNet.TreeNode node = new ExtAspNet.TreeNode();
                node.Text = obra.nombre;
                node.Expanded = true;
                node.Leaf = true;

                node.NavigateUrl = "ObraAdmin/ObraAdminForm.aspx?idObra=" + obra.idInternal;
                node.EnablePostBack = false;
                treeNode.Nodes.Add(node);


            }
        }

        protected void Timer1_Tick(object sender, EventArgs e)
        {
            if (Session["idEmpleado"] == null)
            {
                Alert.Show("La Session del usuario fue terminada" +
                     "<br/>debe de ingresar de nuevo al Sistema" +
                     "<br/> Motivo: Nueva Actualizacion del sistema");
                

               
            }
        }






        //protected void Timer1_Tick(object sender, EventArgs e)
        //{
        //    Label1.Text = "UpdatePanel1 refreshed at: " +
        //      DateTime.Now.ToLongTimeString();
          
        //}


    }
}
